summaryrefslogtreecommitdiff
path: root/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx')
-rw-r--r--app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx206
1 files changed, 182 insertions, 24 deletions
diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx
index d00bfaa8..e92edc11 100644
--- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx
+++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/basic/basic-info-client.tsx
@@ -18,6 +18,12 @@ import { toast } from "sonner";
import { VendorData, VendorFormData, VendorAttachment } from "./types";
import { updateVendorData } from "./actions";
import { noDataString } from "./constants";
+import { PQSimpleDialog } from "@/components/vendor-info/pq-simple-dialog";
+import { SiteVisitDetailDialog } from "@/lib/site-visit/site-visit-detail-dialog";
+import { DocumentStatusDialog } from "@/components/vendor-regular-registrations/document-status-dialog";
+import { AdditionalInfoDialog } from "@/components/vendor-regular-registrations/additional-info-dialog";
+import { getSiteVisitRequestsByVendorId } from "@/lib/site-visit/service";
+import { fetchVendorRegistrationStatus } from "@/lib/vendor-regular-registrations/service";
import {
Table,
TableBody,
@@ -314,6 +320,16 @@ export default function BasicInfoClient({
}: BasicInfoClientProps) {
const [editMode, setEditMode] = useState(false);
const [isPending, startTransition] = useTransition();
+
+ // 다이얼로그 상태
+ const [pqDialogOpen, setPqDialogOpen] = useState(false);
+ const [siteVisitDialogOpen, setSiteVisitDialogOpen] = useState(false);
+ const [contractDialogOpen, setContractDialogOpen] = useState(false);
+ const [additionalInfoDialogOpen, setAdditionalInfoDialogOpen] = useState(false);
+
+ // 각 다이얼로그에 필요한 데이터 상태
+ const [selectedSiteVisitRequest, setSelectedSiteVisitRequest] = useState<any>(null);
+ const [registrationData, setRegistrationData] = useState<any>(null);
const [formData, setFormData] = useState<VendorFormData>({
vendorName: initialData?.vendorName || "",
representativeName: initialData?.representativeName || "",
@@ -326,6 +342,8 @@ export default function BasicInfoClient({
fax: initialData?.fax || "",
email: initialData?.email || "",
address: initialData?.address || "",
+ addressDetail: initialData?.addressDetail || "",
+ postalCode: initialData?.postalCode || "",
businessSize: initialData?.businessSize || "",
country: initialData?.country || "",
website: initialData?.website || "",
@@ -363,6 +381,8 @@ export default function BasicInfoClient({
fax: initialData?.fax || "",
email: initialData?.email || "",
address: initialData?.address || "",
+ addressDetail: initialData?.addressDetail || "",
+ postalCode: initialData?.postalCode || "",
businessSize: initialData?.businessSize || "",
country: initialData?.country || "",
website: initialData?.website || "",
@@ -387,6 +407,56 @@ export default function BasicInfoClient({
);
};
+ // PQ 조회 핸들러
+ const handlePQView = () => {
+ setPqDialogOpen(true);
+ };
+
+ // 실사 정보 조회 핸들러
+ const handleSiteVisitView = async () => {
+ try {
+ const siteVisitRequests = await getSiteVisitRequestsByVendorId(parseInt(vendorId));
+ if (siteVisitRequests.length === 0) {
+ toast.info("실사 정보가 없습니다.");
+ return;
+ }
+ setSelectedSiteVisitRequest(siteVisitRequests[0]); // 첫 번째 실사 정보 선택
+ setSiteVisitDialogOpen(true);
+ } catch (error) {
+ console.error("실사 정보 조회 오류:", error);
+ toast.error("실사 정보를 불러오는데 실패했습니다.");
+ }
+ };
+
+ // 기본계약 현황 조회 핸들러
+ const handleContractView = async () => {
+ try {
+ const result = await fetchVendorRegistrationStatus(parseInt(vendorId));
+ if (!result.success || !result.data) {
+ toast.info("기본계약 정보가 없습니다.");
+ return;
+ }
+
+ // 등록 데이터가 있는지 확인
+ const registrationRecord = result.data;
+ if (!registrationRecord || !registrationRecord.documentSubmissions) {
+ toast.info("정규등록 정보가 없습니다.");
+ return;
+ }
+
+ setRegistrationData(registrationRecord);
+ setContractDialogOpen(true);
+ } catch (error) {
+ console.error("기본계약 정보 조회 오류:", error);
+ toast.error("기본계약 정보를 불러오는데 실패했습니다.");
+ }
+ };
+
+ // 추가정보 조회 핸들러
+ const handleAdditionalInfoView = () => {
+ setAdditionalInfoDialogOpen(true);
+ };
+
if (!initialData) {
return (
<div className="p-6 bg-background max-w-full">
@@ -459,12 +529,12 @@ export default function BasicInfoClient({
fieldKey="vendorName"
onChange={(value) => updateField("vendorName", value)}
/>
- <InfoItem
+ {/* <InfoItem
title="설립일"
// 현재 필드 없고 linter error 나도 무시. createdAt은 데이터베이스 생성시점이므로 잘못된 필드.
value={initialData.establishmentDate}
type="readonly"
- />
+ /> */}
<InfoItem
title="대표전화"
value={formData.phone}
@@ -473,14 +543,14 @@ export default function BasicInfoClient({
fieldKey="phone"
onChange={(value) => updateField("phone", value)}
/>
- <InfoItem
+ {/* <InfoItem
title="팩스"
value={formData.fax}
isEditable={true}
editMode={editMode}
fieldKey="fax"
onChange={(value) => updateField("fax", value)}
- />
+ /> */}
<InfoItem
title="업체유형"
value={formData.businessType}
@@ -489,7 +559,7 @@ export default function BasicInfoClient({
fieldKey="businessType"
onChange={(value) => updateField("businessType", value)}
/>
- <InfoItem
+ {/* <InfoItem
title="소개자료"
value={`회사: ${
attachmentsByType.COMPANY_INTRO?.length || 0
@@ -498,7 +568,7 @@ export default function BasicInfoClient({
editMode={editMode}
type="file-button"
onFileButtonClick={() => handleFileManagement("소개자료")}
- />
+ /> */}
<InfoItem
title="정기평가 등급"
value={
@@ -529,6 +599,22 @@ export default function BasicInfoClient({
onChange={(value) => updateField("address", value)}
/>
<InfoItem
+ title="상세주소"
+ value={formData.addressDetail}
+ isEditable={true}
+ editMode={editMode}
+ fieldKey="addressDetail"
+ onChange={(value) => updateField("addressDetail", value)}
+ />
+ <InfoItem
+ title="우편번호"
+ value={formData.postalCode}
+ isEditable={true}
+ editMode={editMode}
+ fieldKey="postalCode"
+ onChange={(value) => updateField("postalCode", value)}
+ />
+ <InfoItem
title="E-mail"
value={formData.email}
isEditable={true}
@@ -536,7 +622,7 @@ export default function BasicInfoClient({
fieldKey="email"
onChange={(value) => updateField("email", value)}
/>
- <InfoItem
+ {/* <InfoItem
title="사업유형"
value={formData.businessType}
isEditable={true}
@@ -556,7 +642,7 @@ export default function BasicInfoClient({
]}
onChange={(value) => updateField("businessSize", value)}
placeholder="기업규모를 선택하세요"
- />
+ /> */}
<InfoItem
title="사업자등록증"
value={`${
@@ -586,11 +672,11 @@ export default function BasicInfoClient({
}
isEditable={true}
/>
- <InfoItem
+ {/* <InfoItem
title="그룹사"
value={initialData.classificationInfo?.groupCompany || null}
isEditable={true}
- />
+ /> */}
<InfoItem
title="국가"
value={formData.country}
@@ -602,13 +688,13 @@ export default function BasicInfoClient({
<InfoItem
title="선호언어"
value={
- initialData.classificationInfo?.preferredLanguage || null
+ initialData.classificationInfo?.preferredLanguage || ""
}
isEditable={true}
/>
<InfoItem
title="산업유형"
- value={initialData.classificationInfo?.industryType || null}
+ value={initialData.classificationInfo?.industryType || ""}
isEditable={true}
/>
<InfoItem
@@ -622,7 +708,7 @@ export default function BasicInfoClient({
<InfoItem
title="당사거래비중"
value={
- initialData.evaluationInfo?.companyTransactionRatio || null
+ initialData.evaluationInfo?.companyTransactionRatio || ""
}
type="readonly"
/>
@@ -633,7 +719,7 @@ export default function BasicInfoClient({
<Separator />
{/* 상세정보 */}
- <InfoSection
+ {/* <InfoSection
title="상세정보"
column1={
<div className="space-y-2">
@@ -749,12 +835,12 @@ export default function BasicInfoClient({
</div>
</div>
}
- />
+ /> */}
- <Separator />
+ {/* <Separator /> */}
{/* 매출정보 */}
- <WideInfoSection
+ {/* <WideInfoSection
title="매출정보"
subtitle="(3개년)"
noPadding={true}
@@ -898,12 +984,12 @@ export default function BasicInfoClient({
</TableBody>
</Table>
}
- />
+ /> */}
- <Separator />
+ {/* <Separator /> */}
{/* 실사정보 */}
- <InfoSection
+ {/* <InfoSection
title="실사정보"
subtitle="(3년)"
column1={
@@ -1004,12 +1090,12 @@ export default function BasicInfoClient({
</div>
</div>
}
- />
+ /> */}
- <Separator />
+ {/* <Separator /> */}
{/* 계약정보 */}
- <InfoSection
+ {/* <InfoSection
title="계약정보"
column1={
<div className="space-y-2">
@@ -1101,8 +1187,80 @@ export default function BasicInfoClient({
))}
</div>
}
- />
+ /> */}
+
+ {/* <Separator /> */}
+
+ {/* 추가 조회 기능 버튼들 */}
+ <div className="border rounded-lg p-6">
+ <div className="text-lg font-semibold mb-4">상세 정보 조회</div>
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
+ <Button
+ variant="outline"
+ onClick={handlePQView}
+ className="h-20 flex flex-col items-center justify-center space-y-2"
+ >
+ <div className="text-sm font-medium">PQ 조회</div>
+ <div className="text-xs text-muted-foreground">제출된 PQ 정보 확인</div>
+ </Button>
+
+ <Button
+ variant="outline"
+ onClick={handleSiteVisitView}
+ className="h-20 flex flex-col items-center justify-center space-y-2"
+ >
+ <div className="text-sm font-medium">실사 정보</div>
+ <div className="text-xs text-muted-foreground">협력업체 방문실사 조회</div>
+ </Button>
+
+ <Button
+ variant="outline"
+ onClick={handleContractView}
+ className="h-20 flex flex-col items-center justify-center space-y-2"
+ >
+ <div className="text-sm font-medium">정규업체 등록 현황</div>
+ <div className="text-xs text-muted-foreground">정규업체 등록 현황 보기</div>
+ </Button>
+
+ <Button
+ variant="outline"
+ onClick={handleAdditionalInfoView}
+ className="h-20 flex flex-col items-center justify-center space-y-2"
+ >
+ <div className="text-sm font-medium">추가정보</div>
+ <div className="text-xs text-muted-foreground">업체 추가정보 조회</div>
+ </Button>
+ </div>
+ </div>
</div>
+
+ {/* 다이얼로그들 */}
+ <PQSimpleDialog
+ open={pqDialogOpen}
+ onOpenChange={setPqDialogOpen}
+ vendorId={vendorId}
+ />
+
+ <SiteVisitDetailDialog
+ isOpen={siteVisitDialogOpen}
+ onOpenChange={setSiteVisitDialogOpen}
+ selectedRequest={selectedSiteVisitRequest}
+ />
+
+ {registrationData && (
+ <DocumentStatusDialog
+ open={contractDialogOpen}
+ onOpenChange={setContractDialogOpen}
+ registration={registrationData}
+ />
+ )}
+
+ <AdditionalInfoDialog
+ open={additionalInfoDialogOpen}
+ onOpenChange={setAdditionalInfoDialogOpen}
+ vendorId={parseInt(vendorId)}
+ readonly={true}
+ />
</div>
);
}